import 'package:flutter/material.dart';

/// 有状态组件的生命周期分为四个阶段，8个函数
/// 1.初始化阶段
///   createState  当State组件开始被创建时会自动调用，生命周期内只会执行一次
///   **initState  当 State 被初始化时会自动调用，生命周期内只会执行一次
///
/// 2.更新阶段
///   **didChangeDependencies  当 State 依赖的数据改变时，即初始化时或者是外部传入的数据改变时自动调用的
///
/// 3.构建阶段
///   build  构建组件结构并返回渲染好的组件实例，生命周期内会被执行多次
///   didUpdateWidget  该方法主要是组件重新构建时才会被调用的
///
/// 4.销毁阶段
///   deactivate  组件从节点中移除时会自动调用，可以监听组件是否即将被销毁
///   dispose  释放组件内存资源时会自动调用，可以监听组件是否被彻底销毁

class MyApp4 extends StatefulWidget {
  String parentName;
  MyApp4({super.key, required this.parentName});

  // 当State组件开始被创建时会自动调用，生命周期内只会执行一次
  @override
  // State<MyApp4> createState() => _MyApp4State();
  State<MyApp4> createState() {
    print('MyApp4.createState');
    return _MyApp4State();
  }
}

class _MyApp4State extends State<MyApp4> {
  // 状态变量
  String name = '张三';
  int age = 20;

  @override
  void initState() {
    print('MyApp4.initState');
    // 获取父组件的值
    name = widget.parentName;
    super.initState();
  }

  @override
  void didChangeDependencies() {
    print('MyApp4.didChangeDependencies');
    super.didChangeDependencies();
  }

  @override
  void deactivate() {
    print('MyApp4.deactivate');
    super.deactivate();
  }

  @override
  void dispose() {
    print('MyApp4.deactivate');
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    print('MyApp4.build');
    return Scaffold(
      // 背景颜色
      // backgroundColor: Colors.blueGrey,
      // 导航栏
      appBar: AppBar(
        // 导航栏标题
        title: Text('组件生命周期'),
        // 导航栏背景颜色
        backgroundColor: const Color.fromARGB(255, 232, 10, 10),
      ),
      // 显示图片  组件 居中
      body: Center(
        child: Text(
          '我叫$name,今年$age岁了',
          style: TextStyle(
            fontSize: 20,
            color: Color.fromARGB(255, 54, 4, 236),
          ),
        ),
      ),
      // 浮动按钮
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          // 设置状态
          setState(() {
            age = age + 1;
          });
        },
        child: Icon(Icons.add),
      ),
    );
  }
}
